home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / prgtools / programm.ing / m2gem106.lzh / CRYSTAL1.06 / CMP / TDIM2 / PD / DIVS_NEW.MOD < prev    next >
Encoding:
Text File  |  1993-11-16  |  2.7 KB  |  59 lines

  1.  
  2. (* Patch um den Bug in der LONGINT-MODULO-Funktion zu beseitigen: *)
  3.  
  4. (*$P-  No entry/exit code, 'cause jumping directly to DIVU32.*)
  5. PROCEDURE DIVS32 (Dividend, Divisor: LONGINT);
  6.  CONST P1 = 4; (* Offset of dividend/quotient on stack.*)
  7.        P2 = 0; (* Offset of divisor/remainder on stack.*)
  8.  BEGIN
  9.   CODE ( 201FH,         (* MOVE.L  (A7)+, D0 *)
  10.          2E2FH, P1,     (* MOVE.L  4H(A7), D7 ; get dividend *)
  11.          2C2FH, P2,     (* MOVE.L  0H(A7), D6 ; get divisor  *)
  12.         0BF86H,         (* EOR.L   D7, D6    *)
  13.          5BC6H,         (* SMI.B   D6 ; signs different? must neg quotient.*)
  14.          4AAFH, P2,     (* TST.L   0H(A7)    *)
  15.          6A04H,         (* BPL.S   [04]      *)
  16.          44AFH, P2,     (* NEG.L   0H(A7)    *)
  17.          4A87H,         (* TST.L   D7        *)
  18.          5BC7H,         (* SMI.B   D7 ; remainder must get dividend's sign,*)
  19.          6A04H,         (* BPL.S   [04] ;   to be compatible with word-MOD.*)
  20.          44AFH, P1 );   (* NEG.L   4H(A7)    *)
  21.   SETREG (8, DIVU32);
  22.   CODE ( 4E90H,         (* JSR     (A0)      *)
  23.          4A07H,         (* TST.B   D7        *)
  24.          6704H,         (* BEQ.S   [04]      *)
  25.          44AFH, P2,     (* NEG.L   0H(A7)    *)
  26.          4A06H,         (* TST.B   D6        *)
  27.          6704H,         (* BEQ.S   [04]      *)
  28.          44AFH, P1,     (* NEG.L   4H(A7)    *)
  29.          2F00H,         (* MOVE.L  D0, -(A7) *)
  30.          4E75H );       (* RTS *)  END DIVS32;
  31.  
  32. (*
  33. Disassembling des alten DIVS32:
  34.  
  35.      procnum = 11
  36.      0H       201F                     MOVE.L  (A7)+,D0
  37.      2H       2E2F 0000                MOVE.L  0000(A7),D7
  38.      6H       2C2F 0004                MOVE.L  0004(A7),D6
  39.      AH       BF86                     EOR.L   D7,D6
  40.      CH       5BC6                     SMI     D6
  41.      EH       4AAF 0004                TST.L   0004(A7)
  42.     12H       6A04                     BPL     [04H] = 00000018H
  43.     14H       44AF 0004                NEG.L   0004(A7)
  44.     18H       4A87                     TST.L   D7
  45.     1AH       5BC7                     SMI     D7
  46.     1CH       6A04                     BPL     [04H] = 00000022H
  47.     1EH       44AF 0000                NEG.L   0000(A7)
  48.     22H       207C 0000 0000           MOVE.L  #0000000H,A0
  49.     28H       4E90                     JSR     (A0)
  50.     2AH       4A07                     TST.B   D7
  51.     2CH       6704                     BEQ     [04H] = 00000032H
  52.     2EH       44AF 0000                NEG.L   0000(A7)
  53.     32H       4A06                     TST.B   D6
  54.     34H       6704                     BEQ     [04H] = 0000003AH
  55.     36H       44AF 0004                NEG.L   0004(A7)
  56.     3AH       2F00                     MOVE.L  D0,-(A7)
  57.     3CH       4E75                     RTS
  58. *)
  59.